home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / dev / m2 / m2error.lha / M2Error.ged next >
Encoding:
Text File  |  1994-03-14  |  5.0 KB  |  158 lines

  1. /* $VER: M2Error V 0.9 © 1994 Fin Schuppenhauer                   */
  2. /* 14. März 1994                                                  */
  3. /* Lädt die Fehlerdatei zum aktuellen Text und zeigt den nächsten */
  4. /* Fehler an.                                                     */
  5. /* Dieses Skript benötigt außerdem das Skript ResetM2Error.ged    */
  6.  
  7.  
  8.  
  9. OPTIONS RESULTS                             /* enable return codes     */
  10.  
  11. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then    /* not started by GoldEd ? */
  12.     address 'GOLDED.1'
  13.  
  14. 'LOCK CURRENT'                              /* lock GUI, gain access   */
  15. OPTIONS FAILAT 6                            /* ignore warnings         */
  16. SIGNAL ON SYNTAX                            /* ensure clean exit       */
  17.  
  18.  
  19. /* ------------------------ INSERT YOUR CODE HERE: ------------------- */
  20.  
  21. /* If you don't use the german version of M2Amiga replace the     */
  22. /* following assignment with the filename of your error message   */
  23. /* file (I don't know, how it's called).                          */
  24. msgfile = 'M2:Fehler-Meldungen'
  25.  
  26. 'QUERY DOC VAR FILENAME'
  27. fname = filename'E'
  28.  
  29. /* Gibt es eine zugehörige Fehlerdatei ? */
  30. if (exists(fname)) then do
  31.    call open('ErrorFile', fname, 'R')
  32.    errfile = readch('ErrorFile', 4)
  33.  
  34.    /* Hat die Datei auch das richtige Format ? (vgl. Handbuch zu M2Amiga */
  35.    /* Abschnitt 7.1, Seite 7-13ff) */
  36.    if c2d(errfile) = 3 then do
  37.       /* Nächsten Fehler berechnen: */
  38.       nexterr = getclip('nextm2err')
  39.       nexterr = nexterr+1
  40.  
  41.       /* In der Fehlerdatei die Fehlercodierung suchen: */
  42.       abbrechen = 0
  43.       /*say nexterr*/
  44.       do i=1 to nexterr while ~(abbrechen)
  45.          /*say i*/
  46.          err = readch('ErrorFile', 4)
  47.          if compare(err,'ÁERR') = 0 then do
  48.             byteoffset = readch('ErrorFile', 4)
  49.             errornum = readch('ErrorFile', 2)
  50.  
  51.             if c2d(errornum,1) = 194 then do
  52.                say 'Als Zeichenkette'
  53.                /* Fehlermeldung ist direkt als Zeichenkette hier */
  54.                /* abgelegt. */
  55.                if c2d(errornum,2) ~= 49664 then do
  56.                   /* Die Zeichenkette ist nicht leer */
  57.                   j = 1
  58.                   do until ch = 0
  59.                      ch = readch('ErrorFile', 1)
  60.                      j = j + 1
  61.                   end
  62.                   if (j // 2) = 1 then
  63.                      ch = readch('ErrorFile', 1)
  64.                end
  65.             end
  66.             else do
  67.                /* Es könnte noch ein weiterer ErrorPart kommen: */
  68.                /* Wenn doch, geht dieses Skript bisher davon aus, */
  69.                /* das es sich dabei um eine ErrorNum und nicht um */
  70.                /* einen String handelt - das kann natürlich irgend- */
  71.                /* wann mal schiefgehen... */
  72.                dummy = readch('ErrorFile', 2)
  73.                if compare(dummy, 'ÁE') = 0 then do
  74.                   /* Nein, doch nicht; zurücksetzen */
  75.                   call seek('ErrorFile', -2)
  76.                end
  77.             end
  78.          end
  79.          else do
  80.             abbrechen = 1
  81.             'REQUEST BODY="Fehlerdatei hat falsches Format." BUTTON=Abbrechen'
  82.          end
  83.          if eof('ErrorFile') then
  84.             abbrechen = 1
  85.       end
  86.       /*say i*/
  87.       if (i-1) ~= nexterr then
  88.          'REQUEST BODY="Kein weiterer Fehler." BUTTON=Ok.'
  89.       else do
  90.          if c2d(errornum, 1) ~= 194 then do
  91.             /* Fehler durch Nummer codiert. */
  92.             errnumdez = c2d(errornum)
  93.             byteoffsetdez = c2d(byteoffset)
  94.             'GOTO TOP'
  95.             'GOTO BYTE='byteoffsetdez
  96.             'ENDWORD'
  97.             call GetErrMsg(errornum)
  98.  
  99.             'REQUEST BODY "Fehler Nr.: 'errnumdez'|'errmsg' " BUTTON=Ok.'
  100.             call setclip('nextm2err', nexterr)
  101.          end
  102.          else
  103.             'REQUEST BODY="Fehler." BUTTON=Ok.'
  104.       end
  105.    end
  106.    else
  107.       'REQUEST BODY="Fehlerdatei hat falsches Format." BUTTON=Ok.'
  108.    call close('ErrorFile')
  109. end
  110. else
  111.    'REQUEST BODY="Keine Fehlerdatei gefunden!" BUTTON=Ok.'
  112.  
  113.  
  114. /* ---------------------------- END OF YOUR CODE --------------------- */
  115.  
  116. 'UNLOCK' /* VERY important: unlock GUI */
  117. EXIT
  118.  
  119. SYNTAX:
  120.  
  121. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  122. 'UNLOCK'
  123. EXIT
  124.  
  125. /* ----- GetErrorMessage --------------------------------------------- */
  126.  
  127. GetErrMsg:
  128.  
  129.    arg errnum
  130.    /* Wieso ist errnum nicht der gleiche Wert, den ich auch übergebe? */
  131.    /* Ok, benutzen wir eben errornum... */
  132.  
  133.    if exists(msgfile) then do
  134.       call open('MsgFile', msgfile, 'R')
  135.       next = d2c(0)
  136.       do until (eof('MsgFile') | currerrnum = errornum)
  137.          call seek('MsgFile', c2d(next), 'B')
  138.          next = readch('MsgFile', 4)
  139.          currerrnum = readch('MsgFile', 2)
  140.       end
  141.       if currerrnum = errornum then do
  142.          errmsg = ''
  143.          do until c2d(ch) = 0
  144.             ch = readch('MsgFile', 1)
  145.             errmsg = errmsg || ch
  146.          end
  147.       end
  148.       else
  149.          errmsg = 'Fehlerbeschreibung nicht gefunden.'
  150.       call close('MsgFile')
  151.       errmsg = left(errmsg, length(errmsg)-1)
  152.    end
  153.    else do
  154.       'REQUEST BODY="Datei M2:Fehler-Meldungen nicht gefunden!" BUTTON=Ok'
  155.       errmsg = ''
  156.    end
  157.  
  158.